package com.dayu.design.结构型.适配器模式;

/**
 * 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
 * 3. 模式中的角色
 * <p>
 * 　　3.1 目标接口（Target）：客户所期待的接口。目标可以是具体的或抽象的类，也可以是接口。
 * <p>
 * 　　3.2 需要适配的类（Adaptee）：需要适配的类或适配者类。
 * <p>
 * 　　3.3 适配器（Adapter）：通过包装一个需要适配的对象，把原接口转换成目标接口。
 * 4. 实现方式
 * <p>
 * （1）类的适配器模式（采用继承实现）
 * <p>
 * （2）对象适配器（采用对象组合方式实现）
 */
public class adapterDemo {

}

/**
 * 已存在的具有特殊功能,但不符合我们既有标准接口的类
 */
class Apaptee {
    public void specificRequest() {
        System.out.println("被适配类具有特殊功能....");
    }
}

/**
 * 目标接口,或称为标准接口
 */
interface Target {
    public void request();
}

/**
 * 具体目标类，只提供普通功能
 */
class ConcreteTarget implements Target {
    @Override
    public void request() {
        System.out.println("我是个普通功能");
    }
}

class Adapter extends Apaptee implements Target {
    @Override
    public void request() {
        super.specificRequest();
    }
}

class demo {
    public static void main(String[] args) {
        //使用普通功能
        Target concreteTarget = new ConcreteTarget();
        concreteTarget.request();

        //使用特殊类功能
        Target adapter = new Adapter();
        adapter.request();
    }
}